package com.example.demo.service;

import com.example.demo.entity.Role;
import com.example.demo.entity.ShippingAddress;
import com.example.demo.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.demo.entity.vo.UserVo;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.ArrayList;
import java.util.List;

/**
* @author 三石
* @description 针对表【user(系统用户)】的数据库操作Service
* @createDate 2024-05-06 21:39:48
*/
public interface UserService extends IService<User> {

    /**
     * 根据用户名查询密码
     * @param username 用户名
     * @return 密码
     */
    String findPasswordByUsername(String username);
    /**
     * 根据用户名查询角色列表
     * @param username 用户名
     * @return 角色列表
     */
    List<Role> findRolesByUsername(String username);

    /**
     * 创建一个普通用户
     * @param user 用户对象
     */
    void createNormalUser(User user);


    /**
     * 登录得到一个用户
     * @param username 用户名
     * @param password 密码
     * @return 用户对象
     */
    User login(String username, String password);

    /**
     * 重置密码
     * @param username 用户输入用户名
     * @param password 用户输入密码
     */
    void resetPassword(String username, String password);


    /**
     * 修改密码
     * @param username 用户名
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     */
    void modifyPassword(String username, String oldPassword, String newPassword);


    /**
     * 修改用户信息
     * @param updateUser 更新用户对象
     */
    void modifyInfo(User updateUser);


    /**
     * 用户上传头像
     * @param updateUser 用户对象
     */
    void uploadAvatar(User updateUser);


    /**
     * 根据用户名,拿到用户Id
     * @param username 用户名
     */
    Long getUserId(String username);


    /**
     * 根据用户名拿到角色
     * @param username 用户名
     * @return
     */
    ArrayList<String> getRoleByUsername(String username);


    /**
     * 获取所有的用户及其角色
     * @return
     */
    List<UserVo> getAllUserWithRole();


    /**
     * 修改用户角色
     * @param userId 用户id
     * @param roles 角色集合
     */
    void modifyUserRole(Long userId, List<Long> roles);


    /**
     * 根据用户id获取用户信息
     * @param userId 用户id
     * @return 用户对象信息
     */
    User getUserInfoByUserId(Long userId);


    /**
     * 修改用户状态
     * @param userId 用户id
     */
    void ModifyUserStatus(Long userId);
}
